<?php

Yii::import('application.modules.ninio.models._base.BaseInstitucion');

/**
 * Modelo heredado de BaseInstitucion
 */
class Institucion extends BaseInstitucion {

    public $observacion_Auditoria; //guarda la observacion para las pistas de auditoria
    public $archivo_Auditoria; //guarda el archivo para la pista de auditoria

    /**
     * Recupera el nombre del modelo
     * @return Institucion
     */

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * Pluraliza el nombre del modelo segun el $n
     * @param int $n
     * @return string
     */
    public static function label($n = 1) {
        return Yii::t('app', 'Institución|Instituciones', $n);
    }

    /**
     * Modifica los nombres de las columnas de la tabla y atributos del modelo
     * @return array
     */
    public function attributeLabels() {
        return array(
            'id' => Yii::t('app', 'ID'),
            'nombre' => Yii::t('app', 'Nombre'),
            'direccion' => Yii::t('app', 'Dirección'),
            'telefono' => Yii::t('app', 'Teléfono'),
            'correo' => Yii::t('app', 'email'),
            'director' => Yii::t('app', 'Director'),
            'observacion_Auditoria' => Yii::t('app', 'Observaciones'),
            'archivo_Auditoria' => Yii::t('app', 'Código documento'),
            'ninioses' => null,
        );
    }

    public function scopes() {
        return array(
            'ordenInstitucion' => array(
                'order' => 't.nombre asc',
            ),
            'limitcincuenta' => array(
                'limit' => 50,
            )
        );
    }

    public function rules() {
        return array(
            array('nombre, direccion, telefono, correo, director', 'required'),
            array('nombre, direccion, telefono, correo, director', 'length', 'max' => 45),
            array('telefono', 'length', 'min' => 7, 'max' => 10),
            array('telefono', 'numerical'),
            array('director', 'onlyAlfabetico'),
            array('correo', 'email'),
            array('observacion_Auditoria, archivo_Auditoria', 'safe'), //todo
            array('id, nombre, direccion, telefono, correo, director', 'safe', 'on' => 'search'),
        );
    }

    public function onlyAlfabetico($attribute, $params) {
        if (!empty($this->attributes['director']) && $attribute == "director") {
            if ($this->attributes['director']) {
                if (!preg_match("/^[a-zA-Z\s]*$/", $this->attributes['director'])) {
                    $this->addError($attribute, 'Este campo no acepta números o caracteres especiales');
                }
            }
        }
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return array
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

    /**
     * Devuelve la institucion dependiente a un id
     * @param int $id id de la institucion
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return DbCriteria
     */
    public function getInstitucion($id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.id=:id',
                    'params' => array(
                        ':id' => $id,
                    )
                )
        );
        return $this;
    }

    /**
     * Busca la institucion que pertenece a un usuario
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return DbCriteria
     */
    public function de_crugeuser_institucion() {
        $this->getDbCriteria()->mergeWith(
                array(
                    'join' => 'LEFT JOIN institucion_cruge_user cui ON cui.institucion_id = t.id',
                    'condition' => 'cui.cruge_user_id=:id',
                    'params' => array(':id' => Yii::app()->user->id,
                    )
                )
        );
        return $this;
    }

     public function behaviors() {
        return array(
            'ActiveRecordLogableBehavior' => array('class' =>
                'application.behaviors.InstitucionActiveRecordLogableBehavior'),
        );
    }

}
